package hang.kafka.admin;

import org.apache.kafka.clients.admin.Admin;
import org.apache.kafka.clients.admin.AdminClientConfig;
import org.apache.kafka.clients.admin.NewTopic;

import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author 航
 * @date 2024/04/13 14:50
 * 主题的创建;
 * 一般主题不能让生产者和消费者来创建主题
 * 可以设置禁用自动创建主题，这样生产者和消费者就不能创建主题了
 **/
public class AdminTopicTest {
    public static void main(String[] args) {
        Map<String, Object> configs = new HashMap<>();
        configs.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");

        // 创建管理员对象
        Admin admin = Admin.create(configs);

        // 创建主题 ---先把主题创建出来，再放到admin中去
        // 创建topic 需要三个参数：name,分区数量,主题分区副本（因子）的数量
        NewTopic topic1 = new NewTopic("topic1", 1, (short) 1);
        //NewTopic topic2 = new NewTopic("topic2", 2, (short) 2);
        //NewTopic topic3 = new NewTopic("topic3", 3, (short) 3);

        // 手动设置分配策略
        Map<Integer, List<Integer>> map = new HashMap<>();
        map.put(0, Arrays.asList(1, 2));
        map.put(1, Arrays.asList(3, 1));
        map.put(2, Arrays.asList(2, 3));
        NewTopic topic4 = new NewTopic("topic4", map);

        // In - Sync - Replicas：同步部分列表(ISR）


        admin.createTopics(Arrays.asList(topic1));

        // 关闭管理者对象
        admin.close();
    }
}
